package com.whvronk.server.codec;

import com.whvronk.server.operation.RequestMessage;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageDecoder;

import java.net.InetSocketAddress;
import java.util.List;

/**
 * 第二次解码
 * 这是将收到的ByteBuf数据转换为RequestMessage对象好在后面进行业务的处理
 */
public class DataProtocolDecoder extends MessageToMessageDecoder<ByteBuf> {

    @Override
    protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list) throws Exception {
        /*
          1.获取对端的IP信息
          2.调用 RequestMessage对象的decode方法,将ByteBuf数据解码为RequestMessage对象,并将客户端的IP地址传到decode方法中,方便在解码的时候使用
          3.将requestMessage消息添加到List的列表中以传递给下一个处理器进行处理的操作
         */
        InetSocketAddress address = (InetSocketAddress) channelHandlerContext.channel().remoteAddress();
        RequestMessage requestMessage = new RequestMessage();
        requestMessage.decode(byteBuf,address.getAddress().getHostAddress());

        list.add(requestMessage);

    }
}
